home *** CD-ROM | disk | FTP | other *** search
/ LOGIC Apps / Logic-APPLE_II_APPS.iso / pc / LOGIC Apple II 5.25" Library - DOS Part 3 / DOS078A.dsk / CATALOG ANALYSIS.bas < prev    next >
BASIC Source File  |  2012-02-16  |  6KB  |  144 lines

  1. 10  REM  CATALOG ANALYSIS PROGRAM
  2. 20  REM VERSION 3 11/01/80
  3. 30  REM  BRUCE W. CHRISTOPHER
  4. 400  GOSUB 13000: REM  INITIALIZATION
  5. 500  GOSUB 7200: REM  READ A DIRECTORY BLOCK
  6. 600  REM  SCAN DIRECTORY ENTRIES 
  7. 700  FOR I = 11 TO 221  STEP 35
  8. 800 A% = DBA% +I
  9. 900  IF  PEEK(A%) = 255  OR  PEEK(A%) = 0  THEN 1400: REM  $FF OR $00 MEANS INACTIVE ENTRY.
  10. 1000  REM  PICKUP FILE-TYPE AND FILE-NAME
  11. 1100 X$ = "": FOR J = 2 TO 32:X$ = X$ + CHR$( PEEK(A% +J)): NEXT J:DE$(E%) = X$
  12. 1200 DP%(E%,0) =  PEEK(A%):DP%(E%,1) =  PEEK(A% +1): REM  GET POINTERS TO TRACK/SECTOR LIST
  13. 1300 E% = E% +1
  14. 1400  NEXT I
  15. 1500 TK% =  PEEK(DBA% +1):SR% =  PEEK(DBA% +2): REM  GET POINTERS TO NEXT DIRECTORY BLOCK
  16. 1600  IF TK%  OR SR%  THEN 500
  17. 1700  REM  NOW EXAMINE THE TRACK/SECTOR LISTS
  18. 1800 EL% = E% -1: FOR I = 0 TO EL%
  19. 1900 TK% = DP%(I,0):SR% = DP%(I,1)
  20. 2000 DP%(I,0) = 0: REM   THIS VARIABLE WILL NOW BE USED AS A SECTOR COUNTER; INITIALIZE IT TO ZERO.
  21. 2100  GOSUB 7200: REM  READ A LIST BLOCK
  22. 2200 DP%(I,0) = DP%(I,0) +1: REM  COUNT ONE SECTOR FOR EACH TRACK/SECTOR-LIST BLOCK.
  23. 2300  FOR A = DBA% +12 TO DBA% +254  STEP 2
  24. 2400  IF  PEEK(A)  OR  PEEK(A +1)  THEN DP%(I,0) = DP%(I,0) +1
  25. 2500  NEXT A:TK% =  PEEK(DBA% +1)
  26. 2600 SR% =  PEEK(DBA% +2)
  27. 2700  IF TK%  OR SR%  THEN 2100
  28. 2800  NEXT I
  29. 2900  REM  NOW SORT THE ARRAYS
  30. 2910  PRINT : PRINT "SORT IN PROGRESS"
  31. 3000 K% = EL% -1
  32. 3100 SW% = 0: FOR I = 0 TO K%
  33. 3200  IF  MID$ (DE$(I),2) < =  MID$ (DE$(I +1),2)  THEN 3600
  34. 3300 X$ = DE$(I):DE$(I) = DE$(I +1):DE$(I +1) = X$
  35. 3400 X% = DP%(I,0):DP%(I,0) = DP%(I +1,0):DP%(I +1,0) = X%
  36. 3500 SW% = 1: REM  INDICATE A SWITCH OCCURED
  37. 3600  NEXT I
  38. 3700 K% = K% -1: IF K% = 0  THEN 4000
  39. 3800  IF SW% < >0  THEN 3100
  40. 3900  REM  NOW LIST THE RESULTS
  41. 4000 K% = 20:SUM% = 0
  42. 4100  FOR I = 0 TO EL%
  43. 4200 K% = K% +1: IF K% <21  THEN 4600
  44. 4300  TEXT : HOME : PRINT "TYPE SCT NAME"
  45. 4400  PRINT "---- --- ------------------------------"
  46. 4500 K% = 1
  47. 4600 X% =  ASC( LEFT$(DE$(I),1))
  48. 4700 L$ = " ": IF X% > = 128  THEN X% = X% -128:L$ = "*"
  49. 4800  IF X% = 0  THEN T$ = "TXT": GOTO 5300
  50. 4900  IF X% = 1  THEN T$ = "INT": GOTO 5300
  51. 5000  IF X% = 2  THEN T$ = "APS": GOTO 5300
  52. 5100  IF X% = 4  THEN T$ = "BIN": GOTO 5300
  53. 5200 T$ = "UNK"
  54. 5300 X$ =  RIGHT$("   " + STR$(DP%(I,0)),4)
  55. 5400  PRINT T$;L$;X$;" "; MID$ (DE$(I),2)
  56. 5500 SUM% = SUM% +DP%(I,0)
  57. 5600  IF K% = 20  THEN 5800
  58. 5700  NEXT I: GOTO 6000
  59. 5800  PRINT : PRINT "TYPE ANY CHARACTER TO CONTINUE";
  60. 5900  GET X$: GOTO 5700
  61. 6000  PRINT : PRINT "TYPE ANY CHARACTER TO CONTINUE";: GET X$
  62. 6100  PRINT : PRINT "--- SUMMARY ---"
  63. 6200  PRINT EL% +1;" DATASET(S) CATALOGED."
  64. 6300  PRINT 84 -EL% -1;" DIRECTORY ENTRIES FREE."
  65. 6400  PRINT SUM%;" SECTOR(S) IN USE."
  66. 6500  PRINT 403 -SUM%;" SECTOR(S) FREE."
  67. 6600  PRINT : INPUT "REPEAT LISTING (Y/N) ?";X$
  68. 6700  IF X$ = "Y"  THEN 3900
  69. 6800  IF X$ < >"N"  THEN 6600
  70. 6900  GOSUB 12700: REM  RESET HIMEM
  71. 7000  END 
  72. 7100  REM  --- READ SUBROUTINE ---
  73. 7200  POKE CCA%,RD%: REM  SET READ COMMAND
  74. 7300  POKE TA%,TK%: REM  SET TRACK#
  75. 7400  POKE SA%,SR%: REM  SET SECTOR#
  76. 7500  POKE ECA%,0: REM  CLEAR ERROR BYTE
  77. 7600  CALL RWTS%: REM  READ A SECTOR
  78. 7700  IF  PEEK(ECA%) = 0  THEN  RETURN 
  79. 7800  FLASH : PRINT  CHR$(7)
  80. 7900  PRINT "I/O ERROR #"; PEEK(ECA%)
  81. 8000  INVERSE : GOTO 6900
  82. 8100  REM *--------------------*
  83. 8200  REM * SUBROUTINE TO SETUP*
  84. 8300  REM *THE RWTS CONTROL-   *
  85. 8400  REM *BLOCKS AND A MACHINE*
  86. 8500  REM *LANGUAGE ENTRY SEQ- *
  87. 8600  REM *UENCE               *
  88. 8700  REM *--------------------*
  89. 8800 HM% =  PEEK(116) *256 + PEEK(115)
  90. 8900  REM  HM% SAVES INITIAL VALUE OF HIMEM
  91. 9000 SIZE% = 16 +17 +4 +256: REM  SUBROUTINE TAKES 16 BYTES, IOB TAKES 17 BYTES, DCT TAKES 4 BYTES AND DATA BUFFER TAKES 256.
  92. 9100  HIMEM: HM% -SIZE%
  93. 9200  IF SLOT% <1  OR SLOT% >7  THEN  GOSUB 12800: PRINT  CHR$(7);"INVALID SLOT NUMBER": END 
  94. 9300 RWTS% = HM% -(SIZE% -1): REM    ENTRY ADDRESS FOR I/O SUBROUTINE
  95. 9400 IA% = RWTS% +16: REM   IOB ADDRESS  
  96. 9500 ECA% = IA% +13: REM  ERROR CODE ADDRESS
  97. 9600 DCT% = IA% +17: REM    DEVICE CHARACTERISTICS TABLE 
  98. 9700 DBA% = DCT% +4: REM   DATA BUFFER ADDRESS  
  99. 9800  REM  --- LOAD I/O SUBROUTINE ---
  100. 9900  POKE RWTS%,169: POKE RWTS% +1,IA%/256
  101. 10000  POKE RWTS% +2,160: POKE RWTS% +3,IA% - INT(IA%/256) *256
  102. 10100  POKE RWTS% +4,32: POKE RWTS% +5,217
  103. 10200  POKE RWTS% +6,3: POKE RWTS% +7,176
  104. 10300  POKE RWTS% +8,5: POKE RWTS% +9,169
  105. 10400  POKE RWTS% +10,0: POKE RWTS% +11,141
  106. 10500  POKE RWTS% +12,ECA% - INT(ECA%/256) *256: POKE RWTS% +13, INT(ECA%/256)
  107. 10600  POKE RWTS% +14,96: POKE RWTS% +15,0
  108. 10700  REM  --- LOAD IOB ---  
  109. 10800  POKE IA%,1: POKE IA% +1,SLOT% *16
  110. 10900  POKE IA% +2,DRIVE%: POKE IA% +3,0: REM  ACCEPT ANY VOLUME 
  111. 11000 TA% = IA% +4: REM  ADDRESS OF IBTRK
  112. 11100 SA% = IA% +5: REM  ADDRESS OF IBSECT
  113. 11200  POKE IA% +6,DCT% - INT(DCT%/256) *256
  114. 11300  POKE IA% +7,DCT%/256
  115. 11400  POKE IA% +8,DBA% - INT(DBA%/256) *256
  116. 11500  POKE IA% +9,DBA%/256
  117. 11600  POKE IA% +10,0: POKE IA% +11,0
  118. 11700  REM  DEFINE DISK COMMAND CODES
  119. 11800 RD% = 1:WR% = 2
  120. 11900 CCA% = IA% +12: REM  COMMAND CODE ADDRESS
  121. 12000  POKE CCA%,0: REM  CLEAR COMMAND CODE
  122. 12100  POKE ECA%,0: POKE IA% +14,0
  123. 12200  POKE IA% +15, PEEK(IA% +1)
  124. 12300  POKE IA% +16, PEEK(IA% +2)
  125. 12400  REM  --- LOAD DEVICE CHARACTERISTICS TABLE ---
  126. 12500  POKE DCT%,0: POKE DCT% +1,1: POKE DCT% +2,239: POKE DCT% +3,216
  127. 12600  RETURN 
  128. 12700  REM  USE THE FOLLOWING SUBROUTINE TO RESTORE HIMEM BEFORE ENDING YOUR PROGRAM.
  129. 12800  HIMEM: HM%: REM  RESTORE ORIGINAL HIMEM
  130. 12900  RETURN 
  131. 13000  REM --INITIALIZATION--
  132. 13100 SLOT% = 6:DRIVE% = 1
  133. 13200  REM  CALL IO-SETUP SUBROUTINE BEFORE DEFINING ANY STRING VARIABLES.
  134. 13300  GOSUB 8100: REM  INIT IO
  135. 13400 E% = 0:X$ = "":EM% = 83
  136. 13500  DIM DE$(EM%): REM  DIRECTORY ENTRIES
  137. 13600  DIM DP%(EM%,1): REM   POINTERS TO TRACK/SECTOR LISTS 
  138. 13700 I = 0:K% = 0:X% = 0:SW% = 0
  139. 13800 TK% = 17:SR% = 12: REM  INITIAL TRACK AND SECTOR
  140. 13900  REM IT IS ASSUMED THAT THE FIRST DIRECTORY BLOCK IS AT TRACK $11, SECTOR $0C
  141. 14000  TEXT : INVERSE 
  142. 14100  PRINT : PRINT "DOS CATALOG ANALYSIS"
  143. 14200  PRINT : PRINT "HIT 'RETURN' WHEN DISKETTE TO BE": INPUT "ANALYZED IS READY.";X$
  144. 14300  RETURN